<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Pagamento_Model extends CI_Controller {
    
    const TABLE_CLIENTE = 'cliente';
    const TABLE_RESERVA = 'reserva';
    const TABLE_STATUS  = 'status';
    const TABLE_BOLETO  = 'boleto';    
    const TABLE_FERIADO = 'feriado';    
    
    function gerenciaPagamentos(){ 
        $this->db->select('*');
        $this->db->from(self::TABLE_CLIENTE);
        $this->db->join(self::TABLE_RESERVA, 'reserva.usuario_idusuario = cliente.usuario_idusuario','inner');
        $this->db->join(self::TABLE_STATUS, 'reserva.status_idstatus = status.idstatus','inner');
        $this->db->join(self::TABLE_BOLETO, 'reserva.idreserva = boleto.reserva_idreserva','inner');        
        $this->db->where('ativo_bol','1');        
        if($this->session->userdata('perfil') != "administrador"){
            $this->db->where('atrasado','0');
            $this->db->where('emitido !=', '0');
            $this->db->where('reserva.usuario_idusuario', $this->session->userdata('idusuario'));
        }
        $this->db->order_by('idboleto', 'DESC');
        $boleto = $this->db->get();
        return $boleto->result();
    }

    function boletoContrato($reserva){ 
        $this->db->select('*');
        $this->db->from(self::TABLE_BOLETO);        
        $this->db->where('ativo_bol','1');
        $this->db->where('nparcela','1');
        $this->db->where('reserva_idreserva', $reserva);
        $boleto = $this->db->get();
        return $boleto->result();
    }

    public function baixaBoleto($boleto){
        if($this->session->userdata('perfil') != 'cliente'){
            $parcelaBol = array('baixa'=>1);
            $this->db->update(self::TABLE_BOLETO, $parcelaBol, array('numboleto'=>$boleto));
            $status = array('status_idstatus'=>'3', 'dtreserva'=>date('Y-m-d', strtotime("now")));  
            $boleto1 = $this->db->get_where(self::TABLE_BOLETO, array('numboleto'=>$boleto));
            $row = $boleto1->row();
            if($row->nparcela == 1){
                $this->db->update(self::TABLE_RESERVA, $status, array('idreserva'=>$row->reserva_idreserva,'status_idstatus'=>2));
               // $this->db->update(self::TABLE_BOLETO, array('emitido'=>1), array('numboleto'=>$boleto,'nparcela'=>2));
            }            
        } 
    }

    function cancelaReserva($idReserva){
        if($this->session->userdata('perfil') != 'cliente'){
            $this->db->update(self::TABLE_RESERVA, array('cancelada'=>1, 'status_idstatus'=>'1') , "idreserva = $idReserva");
            $this->db->update(self::TABLE_BOLETO,  array('atrasado'=>1)  , "reserva_idreserva = $idReserva");            
            $this->db->select('dtinicial');
            $this->db->from(self::TABLE_RESERVA);
            $this->db->where('idreserva', $idReserva);
            $dtreserva = $this->db->get();
            return $dtreserva->result();
        }
    }

    function primeiraReserva($data){
        $ndata = date('Y-m-d', strtotime($data));
        $this->db->select('*');
        $this->db->from(self::TABLE_RESERVA);        
        $this->db->where('status_idstatus', '2');
        $this->db->where('dtinicial',$ndata);
        $this->db->where('cancelada', '0');
        $this->db->where('espera', '0');
        $this->db->order_by('idreserva', 'ASC');
        $this->db->limit(1);
        $reserva = $this->db->get();  
        return $reserva->result();
    }

    function filaReserva($idReserva){
        $this->db->select('*');
        $this->db->from(self::TABLE_RESERVA);        
        $this->db->where('status_idstatus', '2');
        $this->db->where('idreserva',$idReserva);
        $this->db->where('cancelada', '0');
        $this->db->where('espera', '1');
        $this->db->order_by('idreserva', 'DESC');
        $this->db->limit(1);
        $reserva = $this->db->get();  
        return $reserva->result();
    }

    function reservaAnteriorCancelada($data){
        $ndata = date('Y-m-d', strtotime($data));
        $this->db->select('*');
        $this->db->from(self::TABLE_RESERVA);        
        $this->db->where('status_idstatus', '2');
        $this->db->where('dtinicial',$ndata);
        $this->db->where('cancelada', '1');
        $this->db->order_by('idreserva', 'ASC');
        $this->db->limit(1);
        $reserva = $this->db->get();  
        return $reserva->result();
    }

    function proximaReserva($data){
        $ndata = date('Y-m-d', strtotime($data[0]->dtinicial));
        $query = $this->db->get_where(self::TABLE_RESERVA, array('status_idstatus'=>2, 'dtinicial'=>$ndata, 'cancelada !='=>1, 'espera'=>0));                           
        return $query->result(); 
    }

    function emiteBoleto($boleto){
        $this->db->update(self::TABLE_BOLETO, array('emitido'=>1), array('numboleto'=>$row->$boleto));        
    }

    function emiteSegundoBoleto($reserva){        
        $this->db->update(self::TABLE_BOLETO, array('emitido'=>1), array('reserva_idreserva'=>$reserva, 'nparcela'=>2));
        $query = $this->db->get_where(self::TABLE_BOLETO, array('reserva_idreserva'=>$reserva, 'nparcela'=>2));                           
        return $query->result();
    }

    function segundaViaBoleto($idBoleto){
        $hoje   = date("Y-m-d");
        $dtVenc = date("Y-m-d", strtotime( "$hoje +1 day" ));
        $this->db->update(self::TABLE_BOLETO, array('emitido'=>1, 'atrasado'=>0, 'dtVencimento'=>$dtVenc), array('idboleto'=>$idBoleto));        
    }

    function proximoCliente($dtreserva){
        $this->db->update(self::TABLE_BOLETO, array('emitido'=>1), array('numboleto'=>$row->$boleto));        
    }

    function atrasaBoleto($boleto){
        $this->db->update(self::TABLE_BOLETO, array('atrasado'=>1), array('numboleto'=>$row->$boleto));
    }

    function proximoBoleto($idUsusario, $idReserva){
        $hoje   = date("Y-m-d");
        $dtVenc = date("Y-m-d", strtotime( "$hoje +1 day" ));
        $this->db->update(self::TABLE_BOLETO, array('dtemissao'=>$hoje, 'dtvencimento'=>$dtVenc), array('reserva_usuario_idusuario'=>$idUsusario, 'reserva_idreserva'=>$idReserva));
        $this->db->select('*');
        $this->db->from(self::TABLE_BOLETO);        
        $this->db->where('ativo_bol','1');
        $this->db->where('nparcela','1');
        $this->db->where('reserva_usuario_idusuario', $idUsusario);
        $this->db->where('reserva_idreserva', $idReserva);
        $boleto = $this->db->get();
        return $boleto->result();
    }

    function emailProximoFila(){
       /* if($this->session->userdata('perfil') != 'cliente'){
            $this->db->select('*');
            $this->db->from(self::TABLE_CLIENTE);
            $this->db->join(self::TABLE_RESERVA, 'reserva.usuario_idusuario = cliente.usuario_idusuario','inner');
            $this->db->join(self::TABLE_STATUS, 'reserva.status_idstatus = status.idstatus','inner');
            $this->db->join(self::TABLE_BOLETO, 'reserva.idreserva = boleto.reserva_idreserva','inner');
            $this->db->where('token',$token);
            $this->db->where('baixa',$baixa);
            $cliente = $this->db->get();
            return $cliente->result();
        }*/
    }

    function liberaBoleto($boleto){
        if($this->session->userdata('perfil') != 'cliente'){
            $parcelaBol = array('baixa'=>0);
            $this->db->update(self::TABLE_BOLETO, $parcelaBol, array('idboleto'=>$boleto));
            $dtreserva = array('dtreserva'=>NULL,'status_idstatus'=>'2');
            $boleto = $this->db->get_where(self::TABLE_BOLETO, array('idboleto'=>$boleto));
            $row = $boleto->row();
            if($row->nparcela == 1){
                $this->db->update(self::TABLE_RESERVA, $dtreserva, array('idreserva'=>$row->reserva_idreserva,'status_idstatus'=>3));
            }
        }        
    }

    function feriados($dtVencimento){
        $data = date('Y-m-d', strtotime($dtVencimento));
        //$query = $this->db->get_where(self::TABLE_FERIADO, array('dtferiado'=>$data));
        $query = $this->db->get(self::TABLE_FERIADO);
        if ($query->num_rows() > 0 ) { 
            $feriado = $query->result();    
            return $feriado;
        }
    }

    function dadosBoleto($token, $baixa = 0){ 
        $this->db->select('*');
        $this->db->from(self::TABLE_CLIENTE);
        $this->db->join(self::TABLE_RESERVA, 'reserva.usuario_idusuario = cliente.usuario_idusuario','inner');
        $this->db->join(self::TABLE_STATUS, 'reserva.status_idstatus = status.idstatus','inner');
        $this->db->join(self::TABLE_BOLETO, 'reserva.idreserva = boleto.reserva_idreserva','inner');
        $this->db->where('token',$token);
        $this->db->where('baixa',$baixa);
        $cliente = $this->db->get();
        return $cliente->result();
    }

    function geraNumeroBoleto($idboleto, $numero){
        $this->db->update(self::TABLE_BOLETO, array('numboleto'=>$numero, 'emitido'=>1), array('idboleto'=>$idboleto));
    }

    function encaminhaBoleto($idboleto, $baixa = 0){
        $this->db->select('*');
        $this->db->from(self::TABLE_CLIENTE);
        $this->db->join(self::TABLE_RESERVA, 'reserva.usuario_idusuario = cliente.usuario_idusuario','inner');
        $this->db->join(self::TABLE_STATUS, 'reserva.status_idstatus = status.idstatus','inner');
        $this->db->join(self::TABLE_BOLETO, 'reserva.idreserva = boleto.reserva_idreserva','inner');
        $this->db->where('idboleto',$idboleto);
        $this->db->where('baixa',$baixa);
        $cliente = $this->db->get();
        return $cliente->result();
    }

    function inserir($boleto){
        $this->db->insert(self::TABLE_BOLETO, $boleto);
        return $this->db->insert_id();
    }

    function exclui($boleto){
        if($this->session->userdata('perfil') != 'cliente'){
            //$this->db->delete(self::TABLE_BOLETO, "idboleto = $boleto");
            $this->db->update(self::TABLE_BOLETO, array('ativo_bol'=>0), array('idboleto'=>$boleto));
        }
    }

    function clientePorId($id){
        $query = $this->db->get_where('cliente', array('usuario_idusuario'=>$id));
        if ($query->num_rows() > 0 ) {
               $cliente = $query->result(); 
               return $cliente;
        }
    }

    function reservaPorBoleto($id){
        $this->db->update(self::TABLE_RESERVA, array('espera'=>0), array('idreserva'=>$id));
        $query = $this->db->get_where(self::TABLE_RESERVA, array('idreserva'=>$id));
        return $query->result();
    }
}